<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Title</title>
  </head>
  <body>
    <script>
      /*
* 路径 被定义为一条从树中任意节点出发，沿父节点-子节点连接，达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点，且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ，返回其 最大路径和 。

 

示例 1：


输入：root = [1,2,3]
输出：6
解释：最优路径是 2 -> 1 -> 3 ，路径和为 2 + 1 + 3 = 6
示例 2：


输入：root = [-10,9,20,null,null,15,7]
输出：42
解释：最优路径是 15 -> 20 -> 7 ，路径和为 15 + 20 + 7 = 42
 

提示：

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/binary-tree-maximum-path-sum
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。*/
      /*
* 
*            -20
            / \
           3   2
          / \   \
         8   6   9
         *
         *
         * */
      const tree = {
        val: -20,
        left: {
          val: 3,
          left: { val: 8, left: null, right: null },
          right: { val: 6, left: null, right: null },
        },
        right: {
          val: 2,
          left: null,
          right: { val: 9, left: null, right: null },
        },
      };

      const maxPathSum = (root) => {
        let res = -Infinity;

        const dfs = (root) => {
          if (!root) return 0;

          const left = Math.max(dfs(root.left), 0);
          const right = Math.max(dfs(root.right), 0);
          res = Math.max(res, left + right + root.val);
          return Math.max(left+root.val, right+root.val);
        };
        dfs(root);
        return res;
      };

      console.log(maxPathSum(tree));
    </script>
  </body>
</html>

<!--/*var maxPathSum = function (root) {
        let ans = -Infinity;
        function dfs(node) {
          if (!node) {
            return 0;
          }
          const { left, right, val } = node;
          const L = Math.max(dfs(left), 0);
          const R = Math.max(dfs(right), 0);
          ans = Math.max(ans, L + R + val);
          return Math.max(L + val, R + val);

          /!* ans = Math.max(ans, val + L + R, val + L, val + R, val);

          return Math.max(val, val + Math.max(L, R));*!/
        }
        dfs(root);
        return ans;
      };*/-->
